package ln.javatest.day12.demo01;
/*
java.util.list接口 extends Collection接口
list接口的特点：
    1.有序的集合，存储元素和取出的元素的顺序是一致的（存储123，取出123）
    2.有索引，包含了一些带索引的方法
    3.允许存储重复的元素
list接口中带索引的方法（特有）：
    public void add(int index,E element):将指定的元素，添加到该集合中的指定位置上。
    public E get(int index):返回集合中指定位置的元素。
    public E remove(int index):移除列表中指定位置的元素，返回的是被移除的元素
    public E set(int index,E element):用指定元素替换集合中指定位置的元素，返回值是更新前的元素
注意：
    操作索引的时候，一定要防止索引越界异常
    IndexOutOfBoundsException:索引越界异常，集合会报
    ArrayIndexOutOfBoundsException：数组索引越界异常
    StringIndexOutOfBoundsException：字符串索引越界异常
*/

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Demo01List {
    public static void main(String[] args) {
        //创建一个list集合对象，多态
        List<String> list = new ArrayList<>();
        //使用add方法添加元素
        list.add("a");
        list.add("b");
        System.out.println(list); //[a,b]  不是地址，重写了toString方法
        //在1号索引位置添加3
        list.add(1,"3");
        System.out.println(list); //[a, 3, b]
        //移除2号索引位置的元素
        String s = list.remove(2);
        System.out.println("被移除的元素是："+ s); //被移除的元素是：b
        System.out.println(list); //[a, 3]
        //把1号索引位置的元素替换为A
        String s1 = list.set(1,"A");
        System.out.println("被替换的元素是："+ s1);
        System.out.println(list); //
        //list集合遍历有3种方式
        //使用普通for循环遍历
        for (int i = 0; i < list.size(); i++) {
            String s2 = list.get(i);
            System.out.println(s2);
        }
        //使用迭代器
        Iterator<String> it = list.iterator();
        while(it.hasNext()){
            String s2 = it.next();
            System.out.println(s2);
        }
        //使用增强for
        for (String s2 : list) {
            System.out.println(s2);
        }

    }
}
